# 可视化 CSV 数据（支持参数传入输入/输出文件）
# 用法: gnuplot -c plot.gp <datafile.csv> <output_file>
# 说明:
#   - 第1个参数: CSV 数据文件路径（包含表头）
#   - 第2个参数: 输出图片文件路径（支持 .svg/.png/.pdf，未识别则默认 .svg）
#   - 数据列（按 mt0.csv 示例）：
#       num,x0_loc,y0_loc,z0_loc,xy_ris,yx_ris,alph_xy,alph_yx
#   - 本脚本将 x 轴取列 x0_loc，绘制四条曲线：xy_ris, yx_ris, alph_xy, alph_yx

# 参数校验
if (!exists("ARG1") || !exists("ARG2")) {
    print "Usage: gnuplot -c plot.gp <datafile.csv> <output_file(.svg|.png|.pdf)>"
    exit
}

datafile = ARG1
outfile = ARG2

# 解析输出文件后缀，选择终端驱动（默认 svg，兼容无 tolower 的 gnuplot）
outfile_len = strlen(outfile)
ext3 = (outfile_len >= 3) ? substr(outfile, outfile_len-2, 3) : ""
ext4 = (outfile_len >= 4) ? substr(outfile, outfile_len-3, 4) : ""

if (ext3 eq "png" || ext3 eq "PNG") set terminal pngcairo size 1200,800 enhanced font 'Arial,12'; \
else if (ext3 eq "pdf" || ext3 eq "PDF") set terminal pdfcairo enhanced font 'Arial,12' size 12cm,8cm; \
else set terminal svg size 1200,800 font 'Arial,12'
set output outfile

# CSV 读取配置
set datafile separator ","
set datafile columnheaders
set key autotitle columnhead

# 定义排序后的数据源：保留表头，按第2列（x0_loc）数值升序排序
sorted_data = sprintf("< sh -c \"head -n 1 '%s'; tail -n +2 '%s' | sort -t, -n -k2\"", datafile, datafile)

# 画面样式
set title "MT 数据可视化"
set xlabel "x0_loc"
set ylabel "值"
set grid
set tics out

# 线型（可选美化）
set style line 1 lc rgb "#1f77b4" lw 2 pt 7 ps 0.7
set style line 2 lc rgb "#ff7f0e" lw 2 pt 7 ps 0.7
set style line 3 lc rgb "#2ca02c" lw 2 pt 7 ps 0.7
set style line 4 lc rgb "#d62728" lw 2 pt 7 ps 0.7

# 以两个子图绘制：第一个为 xy_ris 与 yx_ris，第二个为 alph_xy 与 alph_yx
set multiplot layout 2,1

# 子图 1：xy_ris 与 yx_ris
set title "xy_ris 与 yx_ris"
set xlabel "x0_loc"
set ylabel "值"
plot \
    sorted_data using 2:5 with linespoints ls 1, \
    sorted_data using 2:6 with linespoints ls 2

# 子图 2：alph_xy 与 alph_yx
set title "alph_xy 与 alph_yx"
set xlabel "x0_loc"
set ylabel "值"
plot \
    sorted_data using 2:7 with linespoints ls 3, \
    sorted_data using 2:8 with linespoints ls 4

unset multiplot

# 结束输出
unset output
